package ar.edu.untref.robotica.simulador;

import java.awt.Point;

public class ParEscenarioRobot {
	private Escenario escenario;
	private Robot robot;
	private int numeroRobot;
	private double velocidadFinalDeseadaIzquierda = 0;
	private double velocidadFinalDeseadaDerecha = 0;
	private Posicion posicionAnterior;
	
	public Escenario getEscenario() {
		return escenario;
	}
	public void setEscenario(Escenario escenario) {
		this.escenario = escenario;
	}
	public Robot getRobot() {
		return robot;
	}
	public void setRobot(Robot robot) {
		this.robot = robot;
	}
	public ParEscenarioRobot(Escenario escenario, Robot robot, int numeroRobot) {
		super();
		this.escenario = escenario;
		this.robot = robot;
		this.numeroRobot = numeroRobot;
	}
	public int getNumeroRobot() {
		return numeroRobot;
	}
	public void setNumeroRobot(int numeroRobot) {
		this.numeroRobot = numeroRobot;
	}
	public double getVelocidadFinalDeseadaIzquierda() {
		return velocidadFinalDeseadaIzquierda;
	}
	public void setVelocidadFinalDeseadaIzquierda(
			double velocidadFinalDeseadaIzquierda) {
		this.velocidadFinalDeseadaIzquierda = velocidadFinalDeseadaIzquierda;
	}
	public double getVelocidadFinalDeseadaDerecha() {
		return velocidadFinalDeseadaDerecha;
	}
	public void setVelocidadFinalDeseadaDerecha(double velocidadFinalDeseadaDerecha) {
		this.velocidadFinalDeseadaDerecha = velocidadFinalDeseadaDerecha;
	}
	
	public Posicion getPosicionAnterior() {
		return posicionAnterior;
	}
	public void setPosicionAnterior(Posicion posicionAnterior) {
		this.posicionAnterior = posicionAnterior;
	}
	public boolean puedeAvanzar() {

		double distanciaSegura = Configuracion.instancia().getDistanciaSegura();
		return this.robot.getDistanciaObstaculoAdelante(this.escenario) > distanciaSegura
				&& this.robot.getDistanciaObstaculo45Derecha(this.escenario) > distanciaSegura
				&& this.robot.getDistanciaObstaculo45Izquierda(this.escenario) > distanciaSegura;
	}
	public boolean puedeRetroceder() {

		double distanciaSegura = Configuracion.instancia().getDistanciaSegura();
		return this.robot.getDistanciaObstaculoAtras(this.escenario) > distanciaSegura;
	}
	public boolean velocidadDeseadaAlcanzadaIzquierda() {

		return this.robot.getRuedaI().getVelocidad().doubleValue() == this.velocidadFinalDeseadaIzquierda;
	}

	public boolean velocidadDeseadaAlcanzadaDerecha() {

		return this.robot.getRuedaD().getVelocidad().doubleValue() == this.velocidadFinalDeseadaDerecha;
	}
	public boolean hayChoque() {

		boolean choco = false;
		int x = escenario.getShapeRobot().getBounds().x;
		int y = escenario.getShapeRobot().getBounds().y;
		int ancho = escenario.getShapeRobot().getBounds().width;
		int alto = escenario.getShapeRobot().getBounds().height;
		for (int i = x; i < x + ancho && i < escenario.getMatriz().length
				&& !choco; i++) {
			for (int j = y; j < y + alto
					&& j < escenario.getMatriz()[i].length && !choco; j++) {
				if (escenario.getMatriz()[i][j] == 1) {
					Point cadaPunto = new Point(i, j);
					if (escenario.getShapeRobot().contains(cadaPunto)) {
						choco = true;
					}
				}
			}
		}
		return choco;
	}
}
